package ninth.Java中线程的实现.Thread类和Runnable接口的区别;

class MyThread implements Runnable {
    private int ticket = 5;

    public void run() {

        for (int i = 0; i < 100; i++) {
            if (ticket > 0) {
                System.out.println("卖票：ticket=" + ticket--);
            }
        }
    }
}

public class 实现Runnable接口可以资源共享 {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        // 启动3个线程
        new Thread(myThread).start();
        new Thread(myThread).start();
        new Thread(myThread).start();
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=63126:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 ninth.Java中线程的实现.Thread类和Runnable接口的区别.实现Runnable接口可以资源共享
卖票：ticket=4
卖票：ticket=2
卖票：ticket=5
卖票：ticket=3
卖票：ticket=1

Process finished with exit code 0

 */
/**
 * 上面的程序启动了三个线程，但是3个线程一共才卖了5张票，即ticket的属性被所有线程的对象共享
 *
 *
 * 实现Runnable接口相对于继承Thread类来说有以下优势：
 * ①适合多个相同程序代码的线程去处理同一资源的情况
 * ②可以避免由于Java的单机单继承特性所带来的局限
 * ③增强了程序的健壮性，代码能够被多个线程共享，代码与数据是独立的
 * 所以在开发中建议使用Runnable接口实现多线程。
 */